
# leetcode 45
# 给你一个非负整数数组 nums ，你最初位于数组的第一个位置。
#
# 数组中的每个元素代表你在该位置可以跳跃的最大长度。
#
# 你的目标是使用最少的跳跃次数到达数组的最后一个位置。
#
# 假设你总是可以到达数组的最后一个位置。

# 输入: nums = [2,3,1,1,4]
# 输出: 2
# 解释: 跳到最后一个位置的最小跳跃数是 2。
#      从下标为 0 跳到下标为 1 的位置，跳 1 步，然后跳 3 步到达数组的最后一个位置。


# 在具体的实现中，我们维护当前能够到达的最大下标位置，记为边界。
# 我们从左到右遍历数组，到达边界时，更新边界并将跳跃次数增加 1。

# [7,0,9,6,9,6,1,7,9,0,1,2,9,0,3]

def jump(self, nums: List[int]) -> int:
    step = 0
    m = nums[0]
    end = 0
    for i in range(len(nums) - 1):
        if nums[i] + i > m:         # 最远距离是否大于i，如果大于需要看看是否先保存。
            m = nums[i] + i
        if end == i:
            end = m                 # 如果之前的距离等于i，需要对end进行更新。
            step += 1
    return step








